package leetcode.数学;

/**
 * 反转整数
 */
public class Test7反转整数 {
    public static int reverse(int x) {
        // 溢出等出现错误时返回0
        Integer integer = 0;
        if (x == 0) {
            return integer;
        } else if (x > 0) {
            String s1 = String.valueOf(x);
            // s1逆序
            String s2 = new StringBuffer(s1).reverse().toString();
            try {
                // 数据大于 2147483647 会抛异常，返回 0
                return Integer.valueOf(s2);
            } catch (Exception e) {
                return integer;
            }
        } else {
            // 处理负数
            String s1 = String.valueOf(x).replaceFirst("-", "");
            // s1逆序
            String s2 = new StringBuffer(s1).reverse().toString();
            try {
                // 数据大于 2147483647 返回 0
                integer =  Integer.valueOf(s2);
            } catch (Exception e) {
                return integer;
            }
            return integer * -1;
        }
    }

    public static void main(String[] args) {
        System.out.println(reverse(-1230));
    }

    public int reverse2(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7))
                return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8))
                return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}
